package com.gxc.greed;

import java.util.Arrays;

/**
 * 分发糖果
 * n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。
 *
 * 你需要按照以下要求，给这些孩子分发糖果：
 *
 * 每个孩子至少分配到 1 个糖果。
 * 相邻两个孩子评分更高的孩子会获得更多的糖果。
 * 请你给每个孩子分发糖果，计算并返回需要准备的 最少糖果数目 。
 */
public class Candy {

    public static void main(String[] args) {
        System.out.println(candy(new int[]{1,0,2}));
    }

    //左右各一次贪心
    public static int candy(int[] ratings) {
        int n = ratings.length;
        int res = 0;
        int[] left = new int[n];
        left[0] = 1;
        int[] right = new int[n];
        right[n - 1] = 1;

        for (int i = 1; i < n; i++) {
            left[i] = ratings[i]>ratings[i-1]?left[i-1]+1:1;
        }
        for (int i = n-2; i >= 0; i--) {
            right[i] = ratings[i]>ratings[i+1]?right[i+1]+1:1;
        }

        for (int i = 0; i < n; i++) {
            res += Math.max(left[i], right[i]);
        }
        return res;
    }

    public static int candy2(int[] ratings) {
        int n = ratings.length;
        int res = 1;

        int prev = 1, length = 0, cur = 1;
        for (int i = 1; i < n; i++) {
            if (ratings[i] >= ratings[i-1]) {
                length = 0;
                prev = ratings[i]==ratings[i-1]?1:prev+1;
                res += prev;
                cur = prev;
            } else {
                length++;
                if (length == cur) {
                    length++;
                }
                res += length;
                prev = 1;
            }
        }
        return res;
    }

}
